<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
// Regression tests for crbug.com/717453.

function mouseMoveTo(element) {
  const document = element.ownerDocument;
  const mouseX = document.offsetLeft + element.offsetLeft + element.offsetWidth / 2;
  const mouseY = document.offsetTop + element.offsetTop + element.offsetHeight / 2;
  eventSender.mouseMoveTo(mouseX, mouseY);
}

test(() => {
  assert_not_equals(window.eventSender, 'This test requires eventSender');

  assert_selection(
  [
    '<textarea id="source">^text|</textarea>',
    '<a href="http://www.example.com/" id="link">link</a>',
    '<textarea id="target"></textarea>'
  ].join(''),
  selection => {
    const document = selection.document;
    const source = document.getElementById('source');
    const link = document.getElementById('link');
    const target = document.getElementById('target');
    source.focus();
    mouseMoveTo(link);
    eventSender.mouseDown();
    eventSender.leapForward(500);
    mouseMoveTo(target);
    eventSender.mouseUp();
  },
  [
    '<textarea id="source">text</textarea>',
    '<a href="http://www.example.com/" id="link">link</a>',
    '<textarea id="target">^http://www.example.com/|</textarea>'
  ].join(''));
}, 'Drag link with unfocused selection in text control');

test(() => {
  assert_not_equals(window.eventSender, 'This test requires eventSender');

  assert_selection(
  [
    '<div contenteditable id="source">^text|</div>',
    '<a href="http://www.example.com/" id="link">link</a>',
    '<textarea id="target"></textarea>'
  ].join(''),
  selection => {
    const document = selection.document;
    const source = document.getElementById('source');
    const link = document.getElementById('link');
    const target = document.getElementById('target');
    source.focus();
    mouseMoveTo(link);
    eventSender.mouseDown();
    eventSender.leapForward(500);
    mouseMoveTo(target);
    eventSender.mouseUp();
  },
  [
    '<div contenteditable id="source">text</div>',
    '<a href="http://www.example.com/" id="link">link</a>',
    '<textarea id="target">^http://www.example.com/|</textarea>'
  ].join(''));
}, 'Drag link with unfocused selection in contenteditable div');

test(() => {
  assert_not_equals(window.eventSender, 'This test requires eventSender');

  assert_selection(
  [
    '<div id="source">^text|</div>',
    '<a href="http://www.example.com/" id="link">link</a>',
    '<textarea id="target"></textarea>'
  ].join(''),
  selection => {
    const document = selection.document;
    const source = document.getElementById('source');
    const link = document.getElementById('link');
    const target = document.getElementById('target');
    document.body.focus();
    mouseMoveTo(link);
    eventSender.mouseDown();
    eventSender.leapForward(500);
    mouseMoveTo(target);
    eventSender.mouseUp();
  },
  [
    '<div id="source">text</div>',
    '<a href="http://www.example.com/" id="link">link</a>',
    '<textarea id="target">^http://www.example.com/|</textarea>'
  ].join(''));
}, 'Drag link with unfocused selection in uneditable text');
</script>
